package dbinfo

// 字段信息信息结构体
type FieldInfo struct {
	Name          string      `json:"name"`          //对象属性名(驼峰名称头字母大写)
	JsonName      string      `json:"jsonName"`      //Json名(驼峰名称头字母小写)
	IsDbField     bool        `json:"isDbField"`     //是否数据库字段
	Field         string      `json:"field"`         //字段名称
	DbName        string      `json:"dbName"`        //所在数据库名称
	DbObj         string      `json:"dbObj"`         //数据库名称别名,对应数据库全局配置名
	TableName     string      `json:"tableName"`     //所在数据库表表名称
	TableJson     string      `json:"tableJson"`     //所在数据库表Json名称(驼峰名称头字母大写)
	KeyName       string      `json:"keyName"`       //表主键名称
	Index         int         `json:"index"`         //序号
	MaxLength     int         `json:"maxLength"`     //最大长度
	IsNull        bool        `json:"isNull"`        //是否允许为空
	IsKey         bool        `json:"isKey"`         //是否主键
	IsExtra       bool        `json:"isExtra"`       //是否自增
	IsBigTxt      bool        `json:"isBigTxt"`      //是否大文本字段
	IsDecimal     bool        `json:"isDecimal"`     //是否浮点数字段
	DefaultData   string      `json:"defaultData"`   //默认值
	GoDefaultData interface{} `json:"goDefaultData"` //默认值(Go语言用)
	Comment       string      `json:"comment"`       //字段备注
	HasDecimal    bool        `json:"hasDecimal"`    //类型是否有小数
	IntLength     int         `json:"intLength"`     //整数位的长度
	DecimalLength int         `json:"decimalLength"` //小数位的长度
	DbFileType    string      `json:"dbFileType"`    //字段在数据库中的类型
	RelTitle      string      `json:"relTitle"`      //关联后显示的名称
	RelName       string      `json:"relName"`       //关联关系中被动关联的字段名,如 (LEFT JOIN RelTable ON RelTable.A = MainTable.B )中的A
	RelMainName   string      `json:"relMainName"`   //关联关系中被关联的字段名,如 (LEFT JOIN RelTable ON RelTable.A = MainTable.B )中的B
	Value         interface{} `json:"value"`         //字段值
}

// 创建结构体,并设置默认值
func (FieldInfo) New() *FieldInfo {
	result := FieldInfo{}

	result.Name = ""           //对象属性名
	result.JsonName = ""       //Json名
	result.IsDbField = false   //是否数据库字段
	result.Field = ""          //字段名称
	result.DbName = ""         //所在数据库名称
	result.DbObj = ""          //数据库名称别名,对应数据库全局配置名
	result.TableName = ""      //所在数据库表表名称
	result.TableJson = ""      //所在数据库表Json名称(驼峰名称头字母大写)
	result.KeyName = ""        //表主键名称
	result.Index = 0           //序号
	result.MaxLength = 1       //最大长度
	result.IsNull = true       //是否允许为空
	result.IsKey = false       //是否主键
	result.IsExtra = false     //是否自增
	result.IsBigTxt = false    //是否大文本字段
	result.IsDecimal = false   //是否浮点数字段
	result.DefaultData = ""    //默认值
	result.GoDefaultData = nil //默认值
	result.Comment = ""        //字段备注
	result.HasDecimal = false  //类型是否有小数
	result.IntLength = 0       //整数位的长度
	result.DecimalLength = 0   //小数位的长度
	result.DbFileType = ""     //字段在数据库中的类型
	result.RelTitle = ""       //关联后显示的名称
	result.RelName = ""        //关联关系中被动关联的字段名,如 (LEFT JOIN RelTable ON RelTable.A = MainTable.B )中的A
	result.RelMainName = ""    //关联关系中被关联的字段名,如 (LEFT JOIN RelTable ON RelTable.A = MainTable.B )中的B
	result.Value = nil         //字段值

	return &result
}

// 复制字段信息
func (field *FieldInfo) Copy() *FieldInfo {
	result := field.New()
	result.Name = field.Name
	result.JsonName = field.JsonName
	result.IsDbField = field.IsDbField
	result.Field = field.Field
	result.DbName = field.DbName
	result.DbObj = field.DbObj
	result.TableName = field.TableName
	result.TableJson = field.TableJson //所在数据库表Json名称(驼峰名称头字母大写)
	result.KeyName = field.KeyName
	result.Index = field.Index
	result.MaxLength = field.MaxLength
	result.IsNull = field.IsNull
	result.IsKey = field.IsKey
	result.IsExtra = field.IsExtra
	result.IsBigTxt = field.IsBigTxt
	result.IsDecimal = field.IsDecimal
	result.DefaultData = field.DefaultData
	result.GoDefaultData = field.GoDefaultData
	result.Comment = field.Comment
	result.HasDecimal = field.HasDecimal
	result.IntLength = field.IntLength
	result.DecimalLength = field.DecimalLength
	result.DbFileType = field.DbFileType
	result.RelTitle = field.RelTitle
	result.RelName = field.RelName
	result.RelMainName = field.RelMainName
	result.Value = field.Value

	return result
}
